package com.hzjiteng.newsbymvp.utils;

import android.util.Log;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonSyntaxException;

import org.json.JSONException;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;

/**
 * json转换类
 *
 * @author Administrator
 * @created_time 2016072615:37
 */
public class JsonUtils {
    private static Gson gson = new Gson();

    /**
     * 将对象转化成json数据
     *
     * @param obj
     * @param <T>
     * @return
     */
    public static <T> String serialize(T obj) {
        return gson.toJson(obj);
    }


    /**
     * 将json字符串转化成对象
     *
     * @param json
     * @param cls
     * @param <T>
     * @return
     * @throws JsonSyntaxException
     */
    public static <T> T deSerilize(String json, Class<T> cls) throws JsonSyntaxException {
        return gson.fromJson(json, cls);
    }

    /**
     * 将json对象转化成实体类
     *
     * @param json
     * @param cls
     * @param <T>
     * @return
     * @throws JsonSyntaxException
     */
    public static <T> T deSerilizes(JsonObject json, Class<T> cls) throws JsonSyntaxException {
        return gson.fromJson(json, cls);
    }


    /**
     * 将json字符串转化成对象
     *
     * @param json
     * @param type
     * @param <T>
     * @return
     * @throws JsonSyntaxException
     */
    public static <T> T deSerilize(String json, Type type) throws JsonSyntaxException {
        return gson.fromJson(json, type);
    }


    /**
     * 将json数组转化成对象集合
     * @param jsonAray
     * @param cls
     * @param <T>
     * @return
     * @throws JSONException
     */
    public static <T> List<T> deSerilizes(String jsonAray, Class<T> cls) throws JSONException {
        Log.e("JsonUtils","请求的结果为:"+jsonAray);
        JsonParser parser = new JsonParser();
        JsonArray array = parser.parse(jsonAray).getAsJsonArray();
        List<T> list = new ArrayList<>();
        for (int i = 0; i < array.size(); i++) {
            list.add(deSerilizes(array.get(i).getAsJsonObject(), cls));
        }
        return list;
    }
}
